#ifndef CASILLERO_H_
#define CASILLERO_H_
#include "IOcupante.h"
#include "MaterialFisico.h"
#include <vector>

class Casillero{
private:
    /* Coordenadas del casillero en la cuadricula. */
    Coordenada posicion;
    /* Ocupantes del casillero. */
    std::vector<IOcupante*> ocupantes;
    /* Material Fisico del que esta compuesto el casillero.*/
    MaterialFisico* material;
	
public:
    /* Constructor. */
    Casillero();
    Casillero(Coordenada coord);
    /* Destructor. */
    ~Casillero();
    /* Devuelve la coordenada en la que se encuentra el casillero. */
    Coordenada getCoordenada();
    /* Devuelve true si el casillero esta vacio y false en caso contrario. */
    bool estaVacio();
    /* Agrega ocupante al vector de ocupantes. */
    void agregarOcupante(IOcupante* ocupante);
    /* Saca ocupante del vector de ocupantes. */
    void sacarOcupante(IOcupante* ocupante);
    /* Saca del vector a los ocupantes que cambiaron de posicion. */
    void sacarDesactualizados();
    /* Devuelve un vector de ocupantes posicionados en el casillero. */
    std::vector<IOcupante*> getOcupantes();
    /* Devuelve un puntero al material del que está compuesto el casillero. */
    MaterialFisico* getMaterial();
    /* Devuelve la coordenada x del casillero en la cuadricula. */
    int getX();
    /* Devuelve la coordenada x del casillero en la cuadricula. */
    int getY();
    void setMaterial(MaterialFisico* material);
};

#endif